﻿using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web.Http;
using TccServicos.Models;
using TccServicos.Util;

namespace TccServicos.Controllers
{
    public class FotoController : ApiController
    {
        #region Atributos
        private string sThread = "";
        #endregion

        #region WebApis do TCC Foto
        [HttpPost]
        public RetornoServico SaveFoto(Foto objeto)
        {
            sThread = Util.Util.NextHex(4);
            string nomeFuncao = string.Format("{0} [{1}]", "SaveFoto", sThread);

            try
            {
                if (!Validacao.ObjetoValido(objeto))
                {
                    Log.GravarLog(string.Format("{0}: {1}", nomeFuncao, Validacao.objetoInvalido));
                }

                string jsonEntrada = JsonConvert.SerializeObject(objeto, new JsonSerializerSettings()
                {
                    NullValueHandling = NullValueHandling.Ignore
                });

                Log.GravarLog(string.Format("{0}: {1}", nomeFuncao, objeto.idFoto));

                byte[] toBytes = Encoding.ASCII.GetBytes(objeto.fotoString);

                using (adoteEntities contexto = new adoteEntities())
                {
                    var objetoSalvar = new CADASTRO_FOTO
                    {
                        ID_FOTO = objeto.idFoto,
                        NOME = objeto.nome,
                        TIPO = objeto.tipo,
                        FOTO = null,
                        FOTO_STRING = objeto.fotoString,
                    };
                    if (objeto.excluir)
                    {
                        contexto.CADASTRO_FOTO.Attach(objetoSalvar);
                        contexto.Entry(objetoSalvar).State = System.Data.EntityState.Deleted;
                        contexto.SaveChanges();
                    }
                    else if (objeto.idFoto > 0)
                    {
                        contexto.CADASTRO_FOTO.Attach(objetoSalvar);
                        contexto.Entry(objetoSalvar).State = System.Data.EntityState.Modified;
                        contexto.SaveChanges();
                    }
                    else
                    {
                        contexto.CADASTRO_FOTO.Add(objetoSalvar);
                        contexto.SaveChanges();
                    }
                    Log.GravarLog(string.Format("{0}: {1}", nomeFuncao, Validacao.salvoComSucesso));
                    return Util.Util.RetornoOk(objetoSalvar.ID_FOTO);
                }
            }
            catch (Exception ex)
            {
                Log.GravarLog(string.Format("{0} Erro: {1}", nomeFuncao, ex.ToString()));
                return Util.Util.RetornoErro(ex.ToString());
            }
        }

        [HttpGet]
        public Foto GetFoto([FromUri] int? idFoto = null)
        {
            sThread = Util.Util.NextHex(4);
            string nomeFuncao = string.Format("{0} [{1}]", "GetFoto", sThread);

            try
            {
                Log.GravarLog(string.Format("{0}: id={1}", nomeFuncao, idFoto.HasValue ? idFoto.Value.ToString() : "0"));

                using (adoteEntities contexto = new adoteEntities())
                {
                    var consulta = (from t in contexto.CADASTRO_FOTO.AsNoTracking()
                                    select new Foto
                                    {
                                        idFoto = t.ID_FOTO,
                                        nome = t.NOME,
                                        tipo = t.TIPO,
                                        //foto = t.FOTO,
                                        foto = null,
                                        fotoString = t.FOTO_STRING,
                                    });
                    if (idFoto.HasValue)
                        consulta = consulta.Where(x => x.idFoto.Equals(idFoto.Value));
                    consulta = consulta.OrderBy(x => x.idFoto);

                    var retorno = consulta.FirstOrDefault();

                    Log.GravarLog(string.Format("{0}: {1}", nomeFuncao, Validacao.consultaComSucesso));

                    return retorno;
                }
            }
            catch (Exception ex)
            {
                Log.GravarLog(string.Format("{0} Erro: {1}", nomeFuncao, ex.ToString()));
                return default(Foto);
            }
        }
        #endregion

    }
}